//
//  Problem1003.swift
//  TestProject
//
//  Created by 武侠 on 2021/5/27.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1003. 检查替换后的词是否有效
 给你一个字符串 s ，请你判断它是否 有效 。
 字符串 s 有效 需要满足：假设开始有一个空字符串 t = "" ，你可以执行 任意次 下述操作将 t 转换为 s ：

 将字符串 "abc" 插入到 t 中的任意位置。形式上，t 变为 tleft + "abc" + tright，其中 t == tleft + tright 。注意，tleft 和 tright 可能为 空 。
 如果字符串 s 有效，则返回 true；否则，返回 false。

 示例 1：
     输入：s = "aabcbc"
     输出：true
     解释：
     "" -> "abc" -> "aabcbc"
     因此，"aabcbc" 有效。
 示例 2：
     输入：s = "abcabcababcc"
     输出：true
     解释：
     "" -> "abc" -> "abcabc" -> "abcabcabc" -> "abcabcababcc"
     因此，"abcabcababcc" 有效。
 示例 3：
     输入：s = "abccba"
     输出：false
     解释：执行操作无法得到 "abccba" 。
 示例 4：
     输入：s = "cababc"
     输出：false
     解释：执行操作无法得到 "cababc" 。
 提示：
     1 <= s.length <= 2 * 104
     s 由字母 'a'、'b' 和 'c' 组成
 */
@objcMembers class Problem1003: NSObject {
    func solution() {
        print(isValid("aabcbc"))
        print(isValid("abcabcababcc"))
        print(isValid("abccba"))
        print(isValid("cababc"))
        print(isValid("abacbcabcc"))
    }
    /*
     思路：遇到abc，删除
     */
    func isValid(_ s: String) -> Bool {
        var list: [Character] = []
        for c in s {
            list.append(c)

            if c == "c", list.count >= 3 {
                if list[list.count-1] == "c", list[list.count-2] == "b", list[list.count-3] == "a" {
                    list.removeLast(3)
                }
            }
        }
        while list.count >= 3 {
            if list[0] == "a" && list[1] == "b" && list[2] == "c" {
                list.removeFirst(3)
            } else {
                return false
            }
        }
        
        return list.count == 0
    }
}
